#include <REGX52.H>
/**
 * 4个楼层，楼层灯指示电梯位置，按键等待电梯到达
 * 横向4灯代表电梯要到达的楼层，按键按下对应楼层灯亮。
 * 程序需要记录当前电梯是上行还是下行。停靠对应楼层，让对应楼层灯闪烁。
 */
int a[4]={1,2,3,4};
int i=0;
int updown;
int count1=0;
int count2=0;
int fing;
int c=0;

void delay_ms(unsigned int ms)
{
    unsigned int i, j;
    for (i = 0; i < ms; i++)
    {
        for (j = 0; j < 123; j++)
            ;
    }
}

int cd1()
{
    int b[5]={0,1,2,3,4};
    int i=0;
    if(P0_0==0)
    {
     while(P0_0==0){}
     P2_4=0;
     i=1;
    }
    if(P0_1==0)
    {
     while(P0_1==0){}
     P2_5=0;
     i=2;
    }
    if(P0_2==0)
    {
     while(P0_2==0){}
     P2_6=0;
     i=3;
    }
    if(P0_3==0)
    {
     while(P0_3==0){}
     P2_7=0;
     i=4;
    }
    return b[i];
}

int cd2()
{
   int b[5]={0,1,2,3,4};
   
   if(P1_5==0)
   {
     while(P1_5==0){}
     P3_7=0;
     c=4;
     updown=0;
   }
    if(P1_4==0)
   {
     while(P1_4==0){}
     P3_6=0;
     updown=1;
     c=3;
   }
    if(P1_3==0)
   {
     while(P1_3==0){}
     P3_5=0;
     updown=0;
     c=3;
   }
   if(P1_2==0)
   {
     while(P1_2==0){}
     P3_4=0;
     updown=1;
     c=2;
   }
    if(P1_1==0)
   {
     while(P1_1==0){}
     P3_3=0;
     updown=0;
     c=2;
   }
    if(P1_0==0)
   {
     while(P1_0==0){}
     P3_2=0;
     updown=1;
     c=1;
   }
    return b[c];
}

void receive(int site)
{
  if(site==1)
  {
   P2_0=0;
   P2_1=1;
   P2_2=1;
   P2_3=1;
  }
  if(site==2)
  {
    P2_0=1;
    P2_1=0;
    P2_2=1;
    P2_3=1;
  }
  if(site==3)
  {
    P2_0=1;
    P2_1=1;
    P2_2=0;
    P2_3=1;
  }
  if(site==4)
  {
    P2_0=1;
    P2_1=1;
    P2_2=1;
    P2_3=0;
  }
  if(site==5)
  {
   P2_0=0;
   P2_1=1;
   P2_2=1;
   P2_3=1;
   delay_ms(500);
   P2_0=1;
   P2_1=1;
   P2_2=1;
   P2_3=1;
   delay_ms(500);
  }
  if(site==6)
  {
    P2_0=1;
    P2_1=0;
    P2_2=1;
    P2_3=1;
   delay_ms(500);
   P2_0=1;
   P2_1=1;
   P2_2=1;
   P2_3=1;
   delay_ms(500);
  }
  if(site==7)
  {
   P2_0=1;
   P2_1=1;
   P2_2=0;
   P2_3=1;
   delay_ms(500);
   P2_0=1;
   P2_1=1;
   P2_2=1;
   P2_3=1;
   delay_ms(500);
  }
  if(site==8)
  {
   P2_0=1;
   P2_1=1;
   P2_2=1;
   P2_3=0;
   delay_ms(500);
   P2_0=1;
   P2_1=1;
   P2_2=1;
   P2_3=1;
   delay_ms(500);
  }
}

void release1(int x,int updown)
{
  if(x==1)
  {
    P3_2=1;
  }
  if(x==4)
  {
    P3_7=1;
  }
  if(x==3)
  {
    if(updown==1)
    {
     P3_6=1;
    }
    if(updown==0)
    {
     P3_5=1;
    }
  }
  if(x==2)
  {
    if(updown==1)
    {
      P3_4=1;
    }
    if(updown==0)
    {
     P3_3=1;
    }
  }
}

void water()
{
 receive(a[fing]+4);
 count2 = cd1();
 if(count2==0)
 {
 receive(a[fing]+4);
 }
 if(count2==a[fing])
 {
 receive(a[fing]+4);
 }
 if(count2>a[fing])
 {
  int j=1;
  while(j)
  {
  receive(a[fing]);
  delay_ms(500);
  fing++;
  if(a[fing]==count2)
  {
  j=0;
  }
  }
 }
if(count2<a[fing])
 {
  int j=1;
  while(j)
  {
  receive(a[fing]);
  delay_ms(500);
  fing--;
  if(a[fing]==count2)
  {
  j=0;
  }
  }
}
}

void juice()
{
  receive(a[fing]);
  count1 = cd2();
  if(a[fing]==count1)
  {
  release1(count1,updown);
  while(1)
  {
    water();
  }
  }
  if(a[fing]<count1)
  {
    if(updown==1)
    {
     int j=1;
     while(j)
     {
      receive(a[fing]);
      delay_ms(500);
      fing++;
      if(a[fing]==count1)
      {
       j=0;
      }
     }
    }
    if(updown==0)
    {
      int j=1;
      int i=1;
      while(j)
      {
      receive(a[fing]);
      fing++;
      if(fing==3)
      {
       j=0;
      }
      delay_ms(500);
      }
      if(count1==4)
      {

      }
      else
      {
      while(i)
      {
      receive(a[fing]);
      delay_ms(500);
      fing--;
      if(a[fing]==count1)
      {
       i=0;
      }
      }
    }  
}
  }
  if(a[fing]>count1)
  {
    if(count1==0){}
    else
      {
        if(updown==0)
        {
        int j=1;
        while(j)
        {
           receive(a[fing]);
           delay_ms(500);
           fing--;
           if(a[fing]==count1)
           {
            j=0;
           }
        }
        }
        if(updown==1)
        {
           int j=1;
           int i=1;
           while(j)
           {
            receive(a[fing]);
            fing--;
           if(fing==0)
            {
             j=0;
            }
            delay_ms(500);
            }
             if(count1==1)
            {

            }
             else
            {
             while(i)
            {
             receive(a[fing]);
             delay_ms(500);
             fing++;
             if(a[fing]==count1)
             {
              i=0;
             }
             }
            } 
        }
        }
      }
}
void main()
{
  fing = 3;
  while(1)
  {
   juice();
  }
}